package scene.composants.popupmenu;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JCheckBoxMenuItem;
import javax.swing.JColorChooser;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;


import scene.composants.RepresentationNote;
import yaut.ENV;


/**
 * Menu clique droit d'une note
 * 
 * @author Delmas Gabriel
 */
public class NoteJPopupMenu extends JPopupMenu implements ActionListener, FocusListener
{
	private static final long serialVersionUID = 1L;
	
	/**
	 * Items du menu clique droit
	 */
	private JMenuItem itemModifierNote, itemSupprimer;
	
	/**
	 * Menu "Ombrage" a cocher 
	 */
	private JCheckBoxMenuItem itemOmbre;
	
	/**
	 * Menu de modification des couleurs
	 */
	private JMenu menuCouleur;
	
	/**
	 * Sous menus des modifications des couleurs
	 */
	private JMenuItem itemCouleurFond, itemCouleurBordure, itemCouleurTexte;

	private RepresentationNote noteGraphique;
	
	/**
	 * Constructeur prend en parametre la note sur laquelle on a fait le clique droit
	 * @param note
	 */
	public NoteJPopupMenu(RepresentationNote note)
	{
		this.noteGraphique=note;

		//Creation du sous menu Modifier la note
		itemModifierNote = new JMenuItem("Modifier la note");
		this.add(itemModifierNote);
		itemModifierNote.addActionListener(this);
		
		//Rajout d'un seperateur
		this.addSeparator();

		//Creation du menu "Modifier Couleur"
		menuCouleur = new JMenu("Modifier couleur");
		this.add(menuCouleur);
		
		//Creation du sous menu "Couleur de fond" dans le menu "Modifier Couleur"
		itemCouleurFond = new JMenuItem("Couleur de fond");
		menuCouleur.add(itemCouleurFond);
		itemCouleurFond.addActionListener(this);

		//Creation du sous menu "Couleur de la bordure" dans le menu "Modifier Couleur"
		itemCouleurBordure = new JMenuItem("Couleur de la bordure");
		menuCouleur.add(itemCouleurBordure);
		itemCouleurBordure.addActionListener(this);

		//Creation du sous menu "Couleur du texte" dans le menu "Modifier Couleur"
		itemCouleurTexte = new JMenuItem("Couleur du texte");
		menuCouleur.add(itemCouleurTexte);
		itemCouleurTexte.addActionListener(this);

		//Creation du sous menu "Ombre"
		itemOmbre = new JCheckBoxMenuItem("Ombre");
		itemOmbre.setSelected(this.noteGraphique.getOmbreComposant());
		this.add(itemOmbre);
		itemOmbre.addActionListener(this);
		
		//Rajout d'un seperateur
		this.addSeparator();

		//Creation du sous menu Supprimer
		itemSupprimer = new JMenuItem("Supprimer");
		this.add(itemSupprimer);
		itemSupprimer.addActionListener(this);
		

		
	}
	
	/**
	 * Gestion des evenements
	 */
	public void actionPerformed(ActionEvent e)
    {
		if(e.getActionCommand()=="Modifier la note")
    	{
			ENV.FRAME.getControleur().modifierNote(this.noteGraphique);
    		setVisible(false);
    	}
		if(e.getActionCommand()=="Ombre")
    	{
			this.noteGraphique.setOmbre();
			
    		setVisible(false);
    	}
    	if(e.getActionCommand()=="Couleur de fond")
    	{
    		Color couleur = JColorChooser.showDialog(ENV.FRAME, "Modifier la couleur...",this.noteGraphique.getCouleurFond());
    		if(couleur != null) 
    			this.noteGraphique.setCouleurFond(couleur);
    		
    		setVisible(false);
    	}
    	if(e.getActionCommand()=="Couleur de la bordure")
    	{
    		Color couleur = JColorChooser.showDialog(ENV.FRAME, "Modifier la couleur...",this.noteGraphique.getCouleurBordure());
    		if(couleur != null) 
    			this.noteGraphique.setCouleurBordure(couleur);
    		
    		setVisible(false);
    	}
    	if(e.getActionCommand()=="Couleur du texte")
    	{
    		Color couleur = JColorChooser.showDialog(ENV.FRAME, "Modifier la couleur...",this.noteGraphique.getCouleurTexte());
    		if(couleur != null) 
    			this.noteGraphique.setCouleurTexte(couleur);
    		
    		setVisible(false);
    	}
    	if(e.getActionCommand()=="Supprimer")
    	{
    		ENV.FRAME.getControleur().supprimerNote(this.noteGraphique);
    		NoteJPopupMenu.this.setVisible(false);
    	}
    	ENV.FRAME.getControleur().notifierModification();
    }
	
	public void focusGained(FocusEvent fe)
	{
		this.repaint();
	}

	public void focusLost(FocusEvent fe)
	{
		this.setVisible(false);
	}
}
